const Goods = require('../model/goods.model')

const { Op, where } = require('sequelize')

class GoodsService {

    // 存入商品
    async createGoodsService({ productName, quantity, price }) {

        const res = await Goods.create({ productName, quantity, price })

        return res
    }

    // 查询
    async getGoodsService({ productId, productName, quantity, price, pageCurrent = 1, pageSize = 10 }) {
        const whereOpt = {}
        // 短路运算
        productId && Object.assign(whereOpt, { productId: { [Op.like]: `%${productId}%` } })
        productName && Object.assign(whereOpt, { productName: { [Op.like]: `%${productName}%` } })  // 不为空则添加到whereOpt中,模糊查询
        quantity && Object.assign(whereOpt, { quantity: { [Op.like]: `%${quantity}%` } })  // 不为空则添加到whereOpt中,模糊查询
        price && Object.assign(whereOpt, { price: { [Op.like]: `%${price}%` } })  // 不为空则添加到whereOpt中,模糊查询

        const { count, rows } = await Goods.findAndCountAll({
            // attributes: ['id', 'username', 'password', 'is_admin'],
            where: whereOpt,
            order: [['updatedAt','DESC'],['createdAt', 'DESC']],
            limit: pageSize,
            offset: (pageCurrent - 1) * pageSize
        })

        // 可以看一下上面res 的结构
        return { data: rows, total: count, pageSize, pageCurrent }

    }

    // 通过 productId 删除
    async deleteGoodsByProductIdService({ productId }) {
        if (!productId) return

        const whereOpt = {}

        productId && Object.assign(whereOpt, { productId: { [Op.eq]: productId } })

        const res = await Goods.destroy({
            where: whereOpt,
        })

        return res

    }

    // 更新
    async updateGoodsService(params) {
        const { productId } = params
        if (!productId) return

        const whereOpt = {}

        productId && Object.assign(whereOpt, { productId: { [Op.eq]: productId } })

        const res = await Goods.update(params, { where: whereOpt })

        return res

    }


}

// 导出后 在控制器 controller中使用
module.exports = new GoodsService()